Enterprises have long realized that in order to remain successful and sustain growth, they must be able to quickly adapt to changes in, for example, the market, economy and technology. Even with agile planning, forecasting and training, an inability of the computing infrastructure to sufficiently adapt to new requirements will often render all other activities moot. Software systems are typically constructed for single use purposes; that is, systems are implemented in response to specific requirements as the requirements are encountered. This leads to a number of systems that do their jobs well, but unfortunately, such systems are unable to integrate with other systems to provide more versatile uses and a holistic view of the enterprise.
This lack of systems integration has led to the development of number of methodologies and tools intended to bridge gaps between systems and create a pseudo heterogeneous computing environment. While many methods have been successful in creating a more integrated computing environment, the solutions did not typically encourage or foster reuse, while eliminating silos where information may be duplicated among two or more systems. A typical problem is that enterprises have several copies of similar data stored in diverse software applications that each focus on a specific business product or functional business area. A more adaptive computing architecture is needed for which a service-based architecture was developed.
The purpose of the service-based architecture is to design systems to be service providers. While a system may comprise hardware and software elements, it is ultimately providing services that can be consumed by other systems. Under a service-based architecture, systems that had been implemented to address specific business requirements in relative isolation are re-defined to be service providers. As such, they become useful not only for performing their intended purpose, but for providing services to other existing and future systems. Through an open standard interface, such as Simple Object Access Protocol (SOAP), services can be consumed by other systems regardless of platform differences. However, the full potential of a service-based architecture cannot be realized absent a method to ensure that redundant and inflexible services are not created.
Services are typically developed on an “as-needed” basis to meet the needs of individual groups within an enterprise, which often leads to a number of similar services, wherein each service is a slight variant of another service. Without the appropriate controls in place, a growing number of services typically increase the on-going maintenance costs of an enterprise's service components. The architectural objective of loose-coupling between requester and provider is often not fully realized, use of standard data names is often not consistently employed, and characteristics of the navigation of internal persistent structures are often evident within many service messages. Managing a service infrastructure is usually a prominent problem within enterprises of various industries, particularly since the adoption of an adaptive architecture approach by those enterprises.
Therefore, a need exists for a method to formally define what and how data is exposed by a component through its service interface and for providing a framework for developing a robust set of consistent, properly-scoped, base services within well-defined domains.